#ifndef Camera_H
#define Camera_H

#include "Vectors.h"
#include "Ray.h"
	class Camera
	{
	public:
		virtual Ray generateRay(Vec2f point)=0;
		virtual Ray generateRay(float fx,float fy)=0;
		virtual void debugMessage()=0;
	};

	class OrthographicCamera : public Camera
	{
	public:
		OrthographicCamera(Vec3f center, Vec3f direction, Vec3f up, float size);

		Ray generateRay(Vec2f point) { return generateRay(point.x(), point.y());}
		Ray generateRay(float fx, float fy);
		void debugMessage();

	private:
		Vec3f m_center;
		Vec3f m_direction;
		Vec3f m_horizontal;
		Vec3f m_up;
		float m_size;	
	};

	class PerspectiveCamera : public Camera
	{
	public:
		PerspectiveCamera(Vec3f center,Vec3f direction,Vec3f up,float angle_radians,float HSW);
		Ray generateRay(Vec2f point) { return generateRay(point.x(), point.y());}
		Ray generateRay(float fx, float fy);
		void debugMessage();

	private:
		Vec3f m_center;
		Vec3f m_direction;
		Vec3f m_horizontal;
		Vec3f m_up;
		float m_angle;
		float m_width;
		float m_height;
	};

#endif